package start.spring.basic.flowable.service;

import javax.sql.DataSource;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser;

import start.spring.basic.dynamic.DynamicRedisDAO;
import start.spring.basic.dynamic.SpringJdbc;
import start.spring.basic.page.PageQuery;
import start.spring.basic.page.PageResult;
import start.spring.basic.util.PageUtil;

/**
 * 
 * ****************************************************************************
 * 业务操作层基类接口，提供公共的service层操作方法
 *
 * @author(作者)：xuyongyun	
 * @date(创建日期)：2020年4月9日
 ******************************************************************************
 */
public interface IBaseService {
	
	/**
	 * 当前登录人员信息
	 *	
	 * @return
	 * @since           1.0
	 */
	LoginUser getLoginUser();
	
	/**
	 * 当前登录人员详细信息
	 *	
	 * @return
	 * @since           1.0
	 */
	SysUser getSysUser();
	
	/**
	 * 
	 * 构造mybatis plus分页参数对象
	 *	
	 * @param pageQuery
	 * @return
	 * @since           1.0
	 */
	<T> IPage<T> getPage(PageQuery pageQuery);

	/**
	 * 
	 * 把mybatis plus分页结果转换成系统公共的分页结果
	 *	
	 * @param page
	 * @return
	 * @since           1.0
	 */
	<T> PageResult<T> getPageResult(IPage<T> page);
	
	/**
	 * 
	 * 把mybatis plus分页结果转换成系统公共的分页结果，支持对象转换
	 *	
	 * @param page
	 * @return
	 * @since           1.0
	 */
	@SuppressWarnings("rawtypes")
	<T> PageResult<T> getPageResult(IPage page, Class<T> target);
	
	/**
	 * 
	 * 把PageUtil分页结果转换成系统公共的分页结果
	 *	
	 * @param page
	 * @return
	 * @since           1.0
	 */
	<T> PageResult<T> getPageResult(PageUtil<T> page);
	
	/**
	 * 
	 * 把PageUtil分页结果转换成系统公共的分页结果，支持对象转换
	 *	
	 * @param page
	 * @return
	 * @since           1.0
	 */
	@SuppressWarnings("rawtypes")
	<T> PageResult<T> getPageResult(PageUtil page, Class<T> target);

	/**
	 * 根据查询参数获取PageUtil分页对象
	 *	
	 * @param pageQuery
	 * @return
	 * @since           1.0
	 */
	<T> PageUtil<T> getPageUtil(PageQuery pageQuery);
	
	/**
	 * 获取系统的redis操作类
	 *	
	 * @return
	 * @since           1.0
	 */
	DynamicRedisDAO getRedis();
	
	/**
	 * 获取指定数据源
	 *	
	 * @param dsKey 数据源唯一标志
	 * @return
	 * @since           1.0
	 */
	DataSource getDs(String dsKey);
	
	/**
     * 获取系统的JdbcTemplate数据库操作类
     *
     * @return
     * @since 1.0
     */
    SpringJdbc getDao();
	
}
